package com.pjmike.netty.server;

import com.pjmike.netty.protocol.message.decoder.AuthDecoder;
import com.pjmike.netty.protocol.message.decoder.HeartbeatDecoder;
import com.pjmike.netty.protocol.message.decoder.TrafficDataDecoder;
import com.pjmike.netty.protocol.message.encoder.AuthEncoder;
import com.pjmike.netty.protocol.message.encoder.Crc32Encoder;
import com.pjmike.netty.protocol.message.encoder.HeartbeatEncoder;
import com.pjmike.netty.protocol.message.encoder.TrafficDataEncoder;
import com.pjmike.netty.server.handler.*;
import io.netty.channel.Channel;
import io.netty.channel.ChannelInitializer;

/**
 * @author pjmike
 * @create 2018-10-24 15:20
 */
public class NettyServerHandlerInitializer extends ChannelInitializer<Channel> {

    @Override
    protected void initChannel(Channel ch) throws Exception {
        ch.pipeline()
                .addLast(new NettyServerHandler())
                //报文CRC32处理编码器
                .addLast(new Crc32Encoder())
                //空闲检测
                .addLast(new ServerIdleStateHandler())
                //认证返回报文编码处理
                .addLast(new AuthEncoder())
                //认证编码处理
                .addLast(new AuthDecoder())
                //认证处理
                .addLast(new AuthHandler())
                //心跳返回报文编码处理
                .addLast(new HeartbeatEncoder())
                //心跳编码处理
                .addLast(new HeartbeatDecoder())
                //心跳处理
                .addLast(new HeartBeatHandler())
                //路口交通参数记录编码处理
                .addLast(new TrafficDataEncoder())
                ///路口交通参数记录处理
                .addLast(new TrafficDataDecoder())
                //路口交通参数记录返回值编码处理
                .addLast(new TrafficDataHandler())
                ;
    }
}
